Skip to content

Comments

Nativo: Add optional placementId parameter and SDK Renderer Version in response#4380

Open
rafataveira wants to merge 5 commits intoprebid:masterfrom
rafataveira:master
Open

Nativo: Add optional placementId parameter and SDK Renderer Version in response#4380
rafataveira wants to merge 5 commits intoprebid:masterfrom
rafataveira:master

Conversation

@rafataveira
Copy link
Contributor

@rafataveira rafataveira commented Feb 6, 2026

This pull request adds native support for the Nativo bidder to the codebase, moving it from a generic alias-based configuration to a dedicated, fully integrated bidder module. The changes include the implementation of the Nativo bidder logic, configuration, schema, and integration tests, as well as the removal of the old alias-based approach.

Nativo Bidder Integration:

  • Implemented the NativoBidder class, handling bid requests and responses, bid extension updates, and error handling. (NativoBidder.java)
  • Defined the Nativo-specific impression extension model ExtImpNativo. (ExtImpNativo.java)
  • Added a dedicated configuration class for Nativo, including dependency injection and usersyncer setup. (NativoConfiguration.java)
  • Created a Nativo-specific bidder configuration file. (nativo.yaml)
  • Added a JSON schema for validating Nativo bidder parameters. (nativo.json)

Testing and Documentation:

  • Added integration tests for the Nativo bidder, including request/response fixtures. (NativoTest.java, test-auction-nativo-request.json, test-auction-nativo-response.json, test-nativo-bid-request.json, test-nativo-bid-response.json) [1] [2] [3] [4] [5]

Configuration and Cleanup:

  • Removed the Nativo alias configuration from the generic bidder config and related test properties, fully switching to the dedicated Nativo adapter. (generic.yaml, test-application.properties, PbsConfig.groovy, BidderParamsSpec.groovy) [1] [2] [3] [4] [5]

These changes ensure that Nativo is now a first-class, configurable bidder in the system, with dedicated code, configuration, validation, and tests.

Schema validation:

  • Introduced a new JSON schema file nativo.json to define and validate the parameters accepted by the Nativo adapter.

🔧 Type of changes

  • new bid adapter
  • bid adapter update
  • new feature
  • new analytics adapter
  • new module
  • module update
  • bugfix
  • documentation
  • configuration
  • dependency update
  • tech debt (test coverage, refactorings, etc.)

✨ What's the context?

Adding optional property "placementId" to Nativo Adapter
Adding SDK Renderer Version in Response

🧠 Rationale behind the change

We have already been using this property, but it wasn't correctly documented in the adapter.
Our mobile ad formats need the Prebid Renderer name and version to work.

🔎 New Bid Adapter Checklist

  • verify email contact works
  • NO fully dynamic hostnames
  • geographic host parameters are NOT required
  • direct use of HTTP is prohibited - implement an existing Bidder interface that will do all the job
  • if the ORTB is just forwarded to the endpoint, use the generic adapter - define the new adapter as the alias of the generic adapter
  • cover an adapter configuration with an integration test

🧪 Test plan

How do you know the changes are safe to ship to production?
Added all the necessary tests.

🏎 Quality check

  • Are your changes following our code style guidelines?
  • Are there any breaking changes in your code?
  • Does your test coverage exceed 90%?
  • Are there any erroneous console logs, debuggers or leftover code in your changes?

@rafataveira rafataveira changed the title Nativo: Add optional placementId parameter Nativo: Add optional placementId parameter and SDK Renderer Version in response Feb 18, 2026
Comment on lines 83 to 92
return bidResponse.getSeatbid().stream()
.filter(Objects::nonNull)
.map(seatBid -> seatBid.getBid().stream()
.filter(Objects::nonNull)
.map(bid -> updateBid(bid, rendererVersion, errors))
.filter(Objects::nonNull)
.map(bid -> BidderBid.of(bid, BidderUtil.getBidType(bid, impMap), bidResponse.getCur()))
.toList())
.flatMap(Collection::stream)
.toList();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

        return bidResponse.getSeatbid().stream()
                .filter(Objects::nonNull)
                .map(SeatBid::getBid)
                .filter(Objects::nonNull)
                .flatMap(Collection::stream)
                .filter(Objects::nonNull)
                .map(bid -> updateBid(bid, rendererVersion, errors))
                .map(bid -> BidderBid.of(bid, BidderUtil.getBidType(bid, impMap), bidResponse.getCur()))
                .toList();

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@rafataveira rafataveira requested a review from CTMBNara February 23, 2026 17:33
Comment on lines 129 to 134
final ExtBidPrebidMeta updatedMeta = extBidPrebid
.map(ExtBidPrebid::getMeta)
.map(ExtBidPrebidMeta::toBuilder)
.orElseGet(ExtBidPrebidMeta::builder)
.rendererVersion(rendererVersion)
.build();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rafataveira I see we are setting the rendererVersion but where are we setting the rendererName?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MattMur, the rendererName is already set, as we use the name to find it in the renderers list to update the version. Line 102

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants